home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
SuperHack
/
SuperHack CD.bin
/
Hack
/
SATTELIT
/
ECSOURCE.ZIP
/
MYPIC.ASM
< prev
next >
Wrap
Assembly Source File
|
1995-12-22
|
34KB
|
1,030 lines
;---------------------------------------------------------------------------
;PIC16C84 Eurocrypt Decoding Software
;Reassembled and described by U.K. 12/95
;
;Hello hacks !
;After spending two days time in reassembling this software for
;eurocrypt decoding with a piccard i offer you the result.
;To get a bit more readable code i added a couple of macros
;which are attached hereto in the file "pic16c84.h".
;Look, learn, enjoy and improve if you can !
;---------------------------------------------------------------------------
list p=16c84
list f=inhx8m
include "pic16c84.h"
;---------------------------------------------------------------------------
;Configuration
;---------------------------------------------------------------------------
IoPin equ 7 ;rb0=0..rb7=7
;---------------------------------------------------------------------------
;Variables (don`t change, because DES-key routines have not been adapted)
;---------------------------------------------------------------------------
ErrFlag equ irp ;IRP-Bit of statusregister used as errorflag
ChanGroup equ tmr0 ;Timer0-Register used as ChannelId-Buffer
RcvBuf equ $1c ;5 Bytes receive buffer
Class equ RcvBuf ;not used
Cmd equ RcvBuf+1 ;Instruction what to do...
SubCmd equ RcvBuf+2 ;Sub-Command (in some cases)
ChannelId equ RcvBuf+3 ;Channelidentifier
DataLen equ RcvBuf+4 ;Length of data
TempKey equ $21 ;7 bytes storage for current key
Result equ $c ;result of descrambled data
Calc equ $14 ;intermediate memory for calculation
;---------------------------------------------------------------------------
; Program area
;---------------------------------------------------------------------------
org $0
Reset call FixDelay
movlwf $9,DataLen ;9 Bytes to send
movlw TbAtr-TbStart ;pointer to ATR-Sequence
call SendString ;send ATR
MsgLoop movlw $90 ;Send EOL $9000 or Error $9008
call SendByte
swapf status,w ;if Errorflag is set then
andlw $8 ;send $08 (Err) else $00 (EOL)
MsgLopNoEol call SendByte
bcf status,ErrFlag ;Clear Error-Flag (IRP)
movlwf $5,$2c ;receive 5 Bytes into
movlwf RcvBuf,fsr ;receive buffer
RcvNextByte call ReadByte
movwf indf
incf fsr
decfg $2c,RcvNextByte
movlwf TbCmdEnd-TbCmd,$2f ;Number of valid instructions (11)
NextCmd movf $2f,w
addlw TbCmd-TbStart-1 ;add table-offset
call Table
xorwf Cmd,w ;if w=cmd then
btfgs status,z,FoundCmd ;..goto FoundCmd
decfg $2f,NextCmd ;else if Count>0 then NextCmd
goto MsgLoop ;Unknown Command -> send EOL
FoundCmd movf $2f,w ;Command-number in table
sublw $9 ;w:=9-w;
btfgc status,c,OnCmdGoto ;if command-number>9 then OnCmdGoto
movf DataLen
btfgs status,z,OnCmdGoto ;if DataLen<>0 then
movf Cmd,w ;..reply
call SendByte ;..Instruction
OnCmdGoto movf $2f,w ;On Cmd Goto ...
addlw TbCmdPro-TbStart-1 ;(was $27)
Table clrf pclath ;Clear programcounter highbyte
addwf pcl ;add offset in w to pc
TbStart
TbAtr retlw $3f ;Answer to reset sequence
retlw $67
retlw $2f
retlw $0
retlw $11
retlw $14
retlw $0
retlw $3
retlw $68
TbReply04 retlw $0 ;Answer of command 04
retlw $15
retlw $0
retlw $d
retlw $0
retlw $0
retlw $0
TbReply04End
TbReply06 retlw $10 ;Answer of command 06
retlw $2
retlw $ca
retlw $20
retlw $11
retlw $7
retlw $54
retlw $56
retlw $33
retlw $20
retlw $20
retlw $20
retlw $20
TbReply06End
TbCmd retlw $2 ;Receive DataLen Bytes, Send Error or EOL
retlw $f0 ;?
retlw $4 ;Send in return + EOL
retlw $b8 ;Just return as DataLen tells +$9008 (Error)
retlw $ac ;?
retlw $a4 ;Receive DataLen Bytes (Channel identify) + EOL
retlw $c0 ;Send 16 Byte descrambled data + EOL
retlw $6 ;Send EOL only + EOL
retlw $24 ;Just return as DataLen tells + EOL
retlw $88 ;Contains data to be descrambled + EOL
retlw $26 ;Send $6e00 instead of EOL
TbCmdEnd
TbCmdPro goto Cmd02orF0 ;$02:
goto Cmd02orF0 ;$F0:
goto Cmd04 ;$04:
goto CmdB8 ;$b8:
goto CmdAC ;$ac:
goto GetChanId ;$a4:
goto ReturnData ;$c0:
goto Cmd06 ;$06:
goto Cmd24 ;$24:
goto Cmd88 ;$88:
goto Cmd26 ;$26:
TbCmdProEnd
TbEeKey retlw FilmNet-$2100 ;FilmNet+,FilmNet MC
retlw TV3-$2100 ;TV3 Norge, TV3 Sweden, TV3 Danmark
retlw BBCPrime-$2100 ;BBC Prime
retlw TV1000-$2100 ;TV1000,TV1000C
;add other key offsets right here, but subtract $2100
TbEeKeyEnd
ReadEeprom bsf status,rp0 ;Bank 1
bsf eecon1,0
bcf status,rp0 ;Bank 0
movf eedata,w ;w=eedata
return
Cmd88 movlw $1a ;Descramble right now !
subwf DataLen ;DataLen:=DataLen-$1a;
btfgs ChanGroup,3,OtherKeyOff ;if ChanGroup>7 goto OtherKeyOff
movf ChanGroup,w ;else
andlw $7
addlw TbEeKey-TbStart ;read KeyOffset
call Table ;...from table
goto SetEeAdr
OtherKeyOff movlw Unknown1-$2100 ;set offset to fifth key
btfsc ChannelId,0
movlw Unknown2-$2100 ;or to sixth key
btfsc ChanGroup,4
addlw $e ;and add probably 2 keys (14 bytes)
;add other channels here (need to know ChanGroup and Id)
SetEeAdr movwf eeadr ;set eprom-adress to Key-Offset in w !
movlwf TempKey,fsr
movlwf $7,$2d ;read 7 bytes key to TempKey-regist.
NextKeyByt call ReadEeprom
movwf indf
incf eeadr
incf fsr
decfg $2d,NextKeyByt
Discard1 call SendRetriev
call ReadByte
decfg DataLen,Discard1
call Get8DcBytes ;get 8 bytes from decoder
call DesKey ;calculate key
movfwf Calc,Result ;store result
movfwf Calc+1,Result+1
movfwf Calc+2,Result+2
movfwf Calc+3,Result+3
movfwf Calc+4,Result+4
movfwf Calc+5,Result+5
movfwf Calc+6,Result+6
movfwf Calc+7,Result+7
call Get8DcBytes ;get 8 bytes from decoder
call DesKey ;calculate
movlwf $2,$2c
discard2 call SendRetriev ;discard 2 bytes
call ReadByte
decfg $2c,discard2
movlw $89 ;Send $89
call SendByte
movlwf $8,$2c ;and get another 8 bytes (no retrieve)
discard3 call ReadByte
decfg $2c,discard3
goto MsgLoop ;that`s it !
Cmd24 movf DataLen
btfgs status,z,Cmd02orF0
incf Cmd,w
call SendByte
Cmd02orF0 btfsc SubCmd,1 ;if SubCmd=1 then
bsf status,ErrFlag ; Error:=true
cmd02a movf DataLen,w ;do
btfgs status,z,MsgLoop ; if DataLen=0 then goto MsgLoop
call ReadByte ; w:=ReadByte();
xorlw $40
btfsc status,z ; if Byte=$40 then
bsf status,ErrFlag ; Error:=true;
decf DataLen ; Dec(DataLen);
goto cmd02a ;loop;
Cmd04 movlwf TbReply04-TbStart,ChannelId ;send command 04 reply
movlw TbReply04End-TbReply04 ;length of answer
cmd04a clrf Cmd
movwf SubCmd
subwf DataLen,w
btfgc status,c,SendStrW
movwf Cmd
movfwf SubCmd,DataLen
goto SendStrW
Cmd06 movlwf TbReply06-TbStart,ChannelId ;send command 06 reply ?
movlw TbReply06End-TbReply06 ;length of answer
goto cmd04a
CmdB8 bsf status,ErrFlag
movfwf $2e,SubCmd
movfwf DataLen,Cmd
clrf DataLen
SendStrW movf ChannelId,w ;W:=Tabbellenoffset
call SendString
untilcmd0 movf Cmd
btfgs status,z,MsgLoop
movf SubCmd,w
call SendByte
decf Cmd
goto untilcmd0
Cmd26 movlw $6e ;Send $6e00 only
call SendByte
movlw $0
goto MsgLopNoEol
CmdAC movlw $a8 ;?
subwf SubCmd,w
btfgs status,c,Cmd02orF0
movf DataLen,w
btfgc status,z,cmdac1
movf Cmd,w
call SendByte
cmdac1 movfwf SubCmd,$2e
xorlw $a4
btfgs status,z,cmdacend
btfgc SubCmd,7,cmdacend
movlw $60
call SendByte
btfss SubCmd,0
bsf status,ErrFlag
cmdacend goto MsgLoop
GetChanId btfsc SubCmd,1 ;identify channel (add other Channels here)
bsf status,ErrFlag
btfgc SubCmd,2,MsgLoop
call ReadByte
call ReadByte
clrf ChanGroup
xorlw $28
btfgs status,z,gci_next
incf ChanGroup
xorlw $2c
btfgs status,z,gci_next
bsf ChanGroup,3
xorlw $4
btfgs status,z,gci_next
incf ChanGroup
bsf status,ErrFlag
gci_next call ReadByte
andlw $f0
iorwf ChanGroup
btfsc ChanGroup,4
bsf ChanGroup,1
movlw $1b
xorwf ChanGroup,w
btfsc status,z
bsf status,ErrFlag
goto MsgLoop
ReturnData movlw $ea ;Answer with $ea10
call SendByte
decf DataLen
movlw $10
call SendByte
decf DataLen
movlwf Result,fsr ;send descrambled data
RDNextByte movf DataLen ;Do
btfgs status,z,MsgLoop ; if DataLen=0 then goto MsgLoop
movf indf,w ; w:=indf[fsr];
call SendByte ; SendByte(w);
incf fsr ; Inc(fsr);
decf DataLen ; Dec(DataLen);
goto RDNextByte ;Loop
SendRetriev movlw $77
SendByte movwf $2a
comf $2a
movlw $32
call VarDelay
movlw (1<<IoPin)^$ff ;IoPin=ausgang, Rest=Eingang
tris portb ;ins portb-register
clrf $2b
bcf portb,IoPin
movlwf $8,$28 ;8 Bits senden
SbLoop call FixDelay
movf $2a,w
xorwf $2b
btfss $2a,7
bcf portb,IoPin
btfsc $2a,7
bsf portb,IoPin
rlf $2a
decfg $28,SbLoop
call FixDelay
comf $2b
btfsc $2b,7
bsf portb,IoPin
btfss $2b,7
bcf portb,IoPin
call FixDelay
movlw $ff ;Alle I/O-Pins als Eingang
tris portb
movlw $4f
call VarDelay
retlw $0
ReadByte btfgs portb,IoPin,ReadByte ;read a byte
movlw $2a
call VarDelay
movlwf $9,$28 ;read 9 Bits (? -> other soft works with 8 Bits !)
ReadNextBit bcf status,c
btfsc portb,IoPin
bsf status,c
rlf $2a
call FixDelay
decfg $28,ReadNextBit
rrf $2a
movlw $28
call VarDelay
comf $2a,w
return
FixDelay movlw $1b ;carry out fix or...
VarDelay movwf $29 ;...user defined delay
DelayLoop decfg $29,DelayLoop
retlw $0
Get8DcBytes movlwf $18,fsr ;receive 8 Bytes from Decoder
movlwf $8,$2c ;and store them in registers $18-$1F
GetNextDc call SendRetriev
call ReadByte
movwf indf
incf fsr
decfg $2c,GetNextDc
retlw $0
SendString movwf $2d ;store w as tableoffset
movf DataLen ;check length of data
btfsc status,z ;return if length is null
return
SendNextByt movf $2d,w ;reload table offset
call Table ;get byte from table to w
xorlw $ff
btfss status,z ;if tablebyte<>$ff then
incf $2d ; Inc(Offset);
xorlw $ff ;repair changes
call SendByte
decfg DataLen,SendNextByt ;send next byte until lenght=0
return
DesTable call DesTable1
movwf $2e
return
DesKey movlwf $10,$20 ;DES-Key Algorithmus
DkLoop1 call DesKeyEnd
movwf $2f
DkLoop2 rlf $24,w
andlw $e0
movwf $2e
btfsc $21,7
bsf $2e,4
rlf $23
rlf $22
rlf $21
swapf $24
rlf $24,w
andlw $e0
movwf $24
swapf $24
btfsc $25,7
bsf $24,0
rlf $27
rlf $26
rlf $25
movf $2e,w
iorwf $24
decfg $2f,DkLoop2
clrf $28
clrf $29
clrf $2a
clrf $2b
clrf $2c
clrf $2d
btfsc $22,2
bsf $28,7
btfsc $23,7
bsf $28,6
btfsc $22,5
bsf $28,5
btfsc $23,0
bsf $28,4
btfsc $21,7
bsf $28,3
btfsc $21,3
bsf $28,2
btfsc $21,5
bsf $28,1
btfsc $24,4
bsf $28,0
btfsc $22,1
bsf $29,7
btfsc $21,2
bsf $29,6
btfsc $23,3
bsf $29,5
btfsc $22,6
bsf $29,4
btfsc $23,1
bsf $29,3
btfsc $23,5
bsf $29,2
btfsc $22,4
bsf $29,1
btfsc $21,4
bsf $29,0
btfsc $24,6
bsf $2a,7
btfsc $21,0
bsf $2a,6
btfsc $22,0
bsf $2a,5
btfsc $21,1
bsf $2a,4
btfsc $24,5
bsf $2a,3
btfsc $23,4
bsf $2a,2
btfsc $22,3
bsf $2a,1
btfsc $21,6
bsf $2a,0
btfsc $26,7
bsf $2b,7
btfsc $27,4
bsf $2b,6
btfsc $24,1
bsf $2b,5
btfsc $25,3
bsf $2b,4
btfsc $26,1
bsf $2b,3
btfsc $27,1
bsf $2b,2
btfsc $24,2
bsf $2b,1
btfsc $25,0
bsf $2b,0
btfsc $27,5
bsf $2c,7
btfsc $26,3
bsf $2c,6
btfsc $25,7
bsf $2c,5
btfsc $26,0
bsf $2c,4
btfsc $26,4
bsf $2c,3
btfsc $27,7
bsf $2c,2
btfsc $25,1
bsf $2c,1
btfsc $27,0
bsf $2c,0
btfsc $25,6
bsf $2d,7
btfsc $27,3
bsf $2d,6
btfsc $26,2
bsf $2d,5
btfsc $26,6
bsf $2d,4
btfsc $27,6
bsf $2d,3
btfsc $25,4
bsf $2d,2
btfsc $24,3
bsf $2d,1
btfsc $24,0
bsf $2d,0
clrf $14
clrf $15
clrf $16
clrf $17
clrf $2e
rrf $1c,w
andlw $7c
btfsc $1f,0
iorlw $80
xorwf $28,w
movwf $2e
rrf $2e
rrf $2e,w
andlw $3f
call DesTable
btfsc $2e,3
bsf $15,7
btfsc $2e,2
bsf $16,7
btfsc $2e,1
bsf $16,1
btfsc $2e,0
bsf $17,1
clrf $2e
rlf $1c,w
andlw $3e
movwf $2e
btfsc $1d,7
bsf $2e,0
swapf $29,w
andlw $f
btfsc $28,0
iorlw $10
btfsc $28,1
iorlw $20
xorwf $2e,w
iorlw $40
call DesTable
btfsc $2e,3
bsf $15,3
btfsc $2e,2
bsf $17,4
btfsc $2e,1
bsf $14,6
btfsc $2e,0
bsf $16,6
clrf $2e
rrf $1d,w
movwf $2e
rrf $2e
rrf $2e
movlw $1f
andwf $2e
btfsc $1c,0
bsf $2e,5
rlf $29,w
addwf $29,w
addwf $29,w
andlw $3c
btfsc $2a,6
iorlw $1
btfsc $2a,7
iorlw $2
xorwf $2e,w
iorlw $80
call DesTable
btfsc $2e,3
bsf $16,0
btfsc $2e,2
bsf $15,0
btfsc $2e,1
bsf $17,2
btfsc $2e,0
bsf $14,2
clrf $2e
rlf $1d,w
andlw $3e
btfsc $1e,7
iorlw $1
xorwf $2a,w
iorlw $c0
call DesTable
btfsc $2e,3
bsf $17,6
btfsc $2e,2
bsf $16,4
btfsc $2e,1
bsf $15,6
btfsc $2e,0
bsf $14,7
clrf $2e
rrf $1e,w
andlw $7c
btfsc $1d,0
iorlw $80
xorwf $2b,w
movwf $2e
rrf $2e
rrf $2e,w
andlw $3f
call DesTable
btfsc $2e,7
bsf $14,0
btfsc $2e,6
bsf $15,2
btfsc $2e,5
bsf $17,7
btfsc $2e,4
bsf $14,5
clrf $2e
rlf $1e,w
andlw $3e
movwf $2e
btfsc $1f,7
bsf $2e,0
swapf $2c,w
andlw $f
btfsc $2b,0
iorlw $10
btfsc $2b,1
iorlw $20
xorwf $2e,w
iorlw $40
call DesTable
btfsc $2e,7
bsf $14,4
btfsc $2e,6
bsf $17,3
btfsc $2e,5
bsf $15,5
btfsc $2e,4
bsf $16,5
clrf $2e
rrf $1f,w
movwf $2e
rrf $2e
rrf $2e
movlw $1f
andwf $2e
btfsc $1e,0
bsf $2e,5
rlf $2c,w
addwf $2c,w
addwf $2c,w
andlw $3c
btfsc $2d,6
iorlw $1
btfsc $2d,7
iorlw $2
xorwf $2e,w
andlw $3f
iorlw $80
call DesTable
btfsc $2e,7
bsf $17,0
btfsc $2e,6
bsf $15,4
btfsc $2e,5
bsf $16,2
btfsc $2e,4
bsf $14,1
clrf $2e
rlf $1f,w
andlw $3e
btfsc $1c,7
iorlw $1
xorwf $2d,w
iorlw $c0
call DesTable
btfsc $2e,7
bsf $14,3
btfsc $2e,6
bsf $17,5
btfsc $2e,5
bsf $15,1
btfsc $2e,4
bsf $16,3
movf $18,w
xorwf $14
movf $19,w
xorwf $15
movf $1a,w
xorwf $16
movf $1b,w
xorwf $17
movfwf $1c,$18
movfwf $1d,$19
movfwf $1e,$1a
movfwf $1f,$1b
movfwf $14,$1c
movfwf $15,$1d
movfwf $16,$1e
movfwf $17,$1f
decfg $20,DkLoop1
retlw $0
DesKeyEnd decf $20,w
btfsc status,z
retlw $1
sublw $d
btfss status,c
retlw $1
xorlw $6
btfsc status,z
retlw $1
retlw $2
SpaceStart
;here is some space left
SpaceEnd
org $2fd
DesTable1 bsf pclath,0 ;PC=$300+w; (don`t move it)
bsf pclath,1
movwf pcl
retlw $2e ;first table value starts at $300 !
retlw $e0
retlw $c4
retlw $bf
retlw $4d
retlw $27
retlw $11
retlw $c4
retlw $72
retlw $4e
retlw $af
retlw $72
retlw $bb
retlw $dd
retlw $68
retlw $11
retlw $83
retlw $5a
retlw $5a
retlw $6
retlw $36
retlw $fc
retlw $fc
retlw $ab
retlw $d5
retlw $39
retlw $9
retlw $95
retlw $e0
retlw $83
retlw $97
retlw $68
retlw $44
retlw $bf
retlw $21
retlw $8c
retlw $1e
retlw $c8
retlw $b8
retlw $72
retlw $ad
retlw $14
retlw $d6
retlw $e9
retlw $72
retlw $21
retlw $8b
retlw $d7
retlw $ff
retlw $65
retlw $9c
retlw $fb
retlw $c9
retlw $3
retlw $57
retlw $9e
retlw $63
retlw $aa
retlw $3a
retlw $40
retlw $5
retlw $56
retlw $e0
retlw $3d
retlw $cf
retlw $a3
retlw $11
retlw $fd
retlw $a8
retlw $44
retlw $fe
retlw $27
retlw $96
retlw $7f
retlw $2b
retlw $c2
retlw $63
retlw $98
retlw $84
retlw $5e
retlw $9
retlw $6c
retlw $d7
retlw $10
retlw $32
retlw $d1
retlw $4d
retlw $ea
retlw $ec
retlw $6
retlw $70
retlw $b9
retlw $55
retlw $3b
retlw $ba
retlw $85
retlw $90
retlw $4d
retlw $ee
retlw $38
retlw $f7
retlw $2a
retlw $5b
retlw $c1
retlw $2a
retlw $93
retlw $84
retlw $5f
retlw $cd
retlw $f4
retlw $31
retlw $a2
retlw $75
retlw $bb
retlw $8
retlw $e6
retlw $4c
retlw $17
retlw $a6
retlw $7c
retlw $19
retlw $60
retlw $d3
retlw $5
retlw $b2
retlw $8e
retlw $6f
retlw $d9
retlw $4a
retlw $dd
retlw $b0
retlw $7
retlw $29
retlw $b0
retlw $ee
retlw $79
retlw $f6
retlw $43
retlw $3
retlw $94
retlw $8f
retlw $16
retlw $d5
retlw $aa
retlw $31
retlw $e2
retlw $cd
retlw $38
retlw $9c
retlw $55
retlw $77
retlw $ce
retlw $5b
retlw $2c
retlw $a4
retlw $fb
retlw $62
retlw $8f
retlw $18
retlw $61
retlw $1d
retlw $61
retlw $46
retlw $ba
retlw $b4
retlw $dd
retlw $d9
retlw $80
retlw $c8
retlw $16
retlw $3f
retlw $49
retlw $73
retlw $a8
retlw $e0
retlw $77
retlw $ab
retlw $94
retlw $f1
retlw $5f
retlw $62
retlw $e
retlw $8c
retlw $f3
retlw $5
retlw $eb
retlw $5a
retlw $25
retlw $9e
retlw $32
retlw $27
retlw $cc
retlw $d7
retlw $1d
retlw $2d
retlw $f8
retlw $8e
retlw $db
retlw $43
retlw $85
retlw $60
retlw $a6
retlw $f6
retlw $3f
retlw $b9
retlw $70
retlw $1a
retlw $43
retlw $a1
retlw $c4
retlw $92
retlw $57
retlw $38
retlw $62
retlw $e5
retlw $bc
retlw $5b
retlw $1
retlw $c
retlw $ea
retlw $c4
retlw $9e
retlw $7f
retlw $29
retlw $7a
retlw $23
retlw $b6
retlw $1f
retlw $49
retlw $e0
retlw $10
retlw $76
retlw $9c
retlw $4a
retlw $cb
retlw $a1
retlw $e7
retlw $8d
retlw $2d
retlw $d8
retlw $f
retlw $f9
retlw $61
retlw $c4
retlw $a3
retlw $95
retlw $de
retlw $b
retlw $f5
retlw $3c
retlw $32
retlw $57
retlw $58
retlw $62
retlw $84
retlw $be
;---------------------------------------------------------------------------
;Fuses
;---------------------------------------------------------------------------
org $2007
dw xt ;OSC=XT CP=ON WDT=OFF PWR=OFF
;---------------------------------------------------------------------------
;EEprom-Data -> Keys
;---------------------------------------------------------------------------
org $2100
FilmNet dw $f2,$58,$27,$33,$e5,$79,$61
TV3 dw $a5,$56,$32,$10,$25,$d7,$c8
BBCPrime dw $99,$01,$00,$5c,$63,$f8,$50
TV1000 dw $90,$87,$fd,$b7,$85,$00,$df
Unknown1 dw $c7,$01,$4b,$3b,$2f,$dd,$be
Unknown2 dw $b6,$3d,$d6,$68,$83,$1f,$5d
Unknown3 dw $ad,$b5,$f2,$f6,$3b,$4d,$a2
Unknown4 dw $a3,$49,$e3,$d2,$95,$9d,$91
;The following codes have been sucked from other hacks and could be
;implemented... try it.
;Nordic1 dw $84,$66,$30,$e4,$da,$fa,$23
;Nordic2 dw $33,$22,$44,$53,$ff,$58,$50
;Nordic3 dw $73,$13,$c6,$8a,$35,$fd,$e7
;Nordic4 dw $ab,$df,$e3,$94,$09,$52,$da
;Unknown5 dw $48,$63,$c5,$b3,$da,$e3,$29
;TV3old dw $18,$07,$4e,$fd,$ef,$f4,$50
;Flashcard dw $4b,$d3,$07,$96,$49,$f9,$2d
end